#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<qpainter.h>
#include<qrect.h>
#include<qtimer.h>
#include<QKeyEvent>
#include"QMouseEvent"
#include"qstring.h"

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MyKey
{
public:
    int k_w=0;int k_a=0;int k_s=0;int k_d=0;int k_j=0;int k_1=0;int k_2=0;int k_3=0;int k_4=0;int k_5=0;
    bool haveKeyDown()
    {
        int sum=k_w+k_a+k_s+k_d+k_j+k_1+k_2+k_3+k_4+k_5;
        if(sum>=1){return 1;}
        else{return 0;}
    }
};

class Bullet
{
public:
    bool bullet_use=true;
    int num_b=30;
    QRect bul;
};//子弹类，用于子弹的发射
class Wall
{
public:
    int num_wall=35;
    QRect wall;
    bool wall_use=false;
    bool wall_boss=false;
};//墙类，用来生成墙
class Enemy
{
public:
    int num_ena=22;
    QRect a;
    bool enemy_use=false;
};//敌人类，生成源石虫
class Boss
{
public:
    QRect boss_body;
    QRect boss_blood;
    bool boss_up=true;//记录boss的上下移动，向上为true，向下为false
    bool boss_arrive=false;//判断boss是否到达
    int change_body=0;//boss体型的变化
};//最终boss，磐蟹
class Buff
{
public:
    QRect addhp;
    bool addhp_use=false;
};//不同的buff有不同的效果
class Heart
{
public:
    bool hp_use=true;
    QRect love;
};
class MainWindow : public QMainWindow,public Bullet,public Wall,public Enemy,
        public Heart,public Boss,public Buff,public MyKey
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void paintEvent(QPaintEvent *event);//初始化界面
    void InitSlime();//初始化史莱姆
    void shoot();//发射子弹
    void P2_shoot();//P2发射子弹
    void wallmove();//墙的生成
    void enemyattack();//敌人的生成
    void lostheart();//损失生命值
    void addheart();//补充生命值
    void P2_lostheart();//P2损失生命值
    void P2_addheart();//补充生命值

private slots:
    void Slime_update();//史莱姆的计时器
    void bullet_update();//子弹的计时器
    void wall_update();//墙的计时器
    void enemy_update();//源石虫计时器
    void boss_update();//磐蟹计时器
    void background_update();//背景计时器

private:
    Ui::MainWindow *ui;
    QRect vSlime;//史莱姆
    QRect func;//属性栏
    QRect background[2];//背景墙
    void mousePressEvent(QMouseEvent *e);
    void keyPressEven(QEvent *key);//设置按键为按下状态
    void keyReleaseEven(QEvent *key);//设置按键为松开状态
    bool event(QEvent *e);
    MyKey pressKey;
    QTimer *timer;//定时器
    QTimer * btimer;
    QTimer * wtimer;
    QTimer * enatimer;
    QTimer * bosstimer;
    QTimer * keytimer;
    QTimer * backtimer;
    bool blsRun=false;//是否开始
    bool blsStop=false;//是否结束
    QString display;
    QString score_words;
    QString P1;
    int score;

    bool alive=true;//是否活着
    Bullet bullets[100];
    Wall walls[35];
    Enemy worm[22];
    Heart HP[3];
    int speed=150;

    //有关P2的一切
    QRect Slime_2P;
    Heart P2_HP[3];
    QString P2;
    Bullet P2_bullets[100];
    bool P2_alive=true;

    //结束界面
    QRect ending;
    QRect try_again;
    QRect home;
    QRect next;
};

#endif // MAINWINDOW_H
